package com.coderly.onlinegallerysharingplatform.common.response;

import com.coderly.onlinegallerysharingplatform.common.convention.errorcode.ErrorCode;
import lombok.Data;

import java.io.Serializable;

/**
 * 全局响应类
 *
 * @param <T>
 */
@Data
public class Response<T> implements Serializable {

    /**
     * 响应码
     */
    private int code;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 响应消息
     */
    private String message;

    public Response(int code, T data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }


    public Response(int code, T data) {
        this(code, data, "");
    }


    public Response(ErrorCode errorCode) {
        this(errorCode.getCode(), null, errorCode.getMessage());
    }


    /**
     * 成功
     *
     * @param data 数据
     * @param <T>  数据类型
     * @return 响应
     */
    public static <T> Response<T> success(T data) {
        return new Response<>(0, data, "ok");
    }

    /**
     * 失败
     *
     * @param errorCode 错误码
     * @return 响应
     */
    public static Response<?> error(ErrorCode errorCode) {
        return new Response<>(errorCode);
    }

    /**
     * 失败
     *
     * @param code    错误码
     * @param message 错误信息
     * @return 响应
     */
    public static Response<?> error(int code, String message) {
        return new Response<>(code, null, message);
    }

    /**
     * 失败
     *
     * @param errorCode 错误码
     * @return 响应
     */
    public static Response<?> error(ErrorCode errorCode, String message) {
        return new Response<>(errorCode.getCode(), null, message);
    }


}
